###############################################
#                 Dissertacao                 #
#        Preferencias politicas importam?     #
#              MAGALHAES, 2020                #
###############################################


#########################
#  Carregar os pacotes  #
#########################

library(data.table)
library(tidyverse)
library(rebus)
library(gdata)
library(rio)

##########################################
#  Fixar o diret�rio e agrupar as bases  #
##########################################


#Colocar o endereco da pasta na qual foram salvas as bases
setwd("")
base <- import("base.rda")
entrancia <- import("entrancias.xlsx")

####################
#   Limpar a base  #
####################

#Deixar as decis�es em letras minusculas

base$Decis�o <- str_to_lower(base$Decis�o)

##Retirar processos que retornaram com erro na coluna (foro onde devia haver assunto..etc)

erros <- "Foro|Magistrado|Comarca|TRIBUNAL|Vara"

erros_base <- str_which(base$Assunto, erros)

base <- base[-erros_base,]

## Agrupar alguns crimes (Furto qualificado e furto simples; estupro de vulner�vel e estupro, por exemplo) 

base$Assunto <- str_to_lower(base$Assunto) #mudar para letras min�sculas

base <- base %>% filter(Assunto != "assunto: assunto n�o informado.") #retirar os processos sem especifica��o do assunto

base <- base %>% separate(Assunto, c(NA, "Assunto"), sep= ": ") #Retirar o texto "assunto:" do nome do crime



crimes <- c("estupro", "sexual","furto", "roubo", "homic�dio", "estelionato",
          "viol�ncia dom�stica", "crimes de tr�fico il�cito e uso indevido de drogas",
          "tr�fico de drogas", "tr�fico e condutas afins", "dano",
          "sonega��o fiscal", "recepta��o", "sistema nacional de armas",
          "leve","grav�ssima", "^grave")

crimes_convert <- c("crimes contra a dignidade sexual",
                    "crimes contra a dignidade sexual",
                    "furto", "roubo", "homic�dio", "estelionato",
          "viol�ncia dom�stica", "tr�fico", "tr�fico", "tr�fico",
          "dano", "crimes contra a ordem tribut�ria", "recepta��o", "crimes do sistema nacional de armas",
          "les�o corporal", "les�o corporal", "les�o corporal")


for (i in 1:length(crimes)){ #Agrupa os crimes

base[str_detect(base$Assunto, crimes[i]),]$Assunto <- crimes_convert[i]
}


#Retirar crimes com menos de 100 casos
#Com isso se evita muitos casos em que a identificacao do crime nao e precisa
crimes_retirar <- base %>% count(Assunto) %>% filter(n<100)

base <- base %>% filter(!Assunto %in% crimes_retirar$Assunto)

#Retirar crimes que permanecem sem identificacao precisa
base <- base %>% filter(!Assunto %in% c("fato at�pico",
                                        "seguida de morte",
                                        "direito penal")) %>% 
  drop_na(Assunto)

##Limpar a data, deixando apenas o ano
a <- str_split(base$Data, "/", simplify = TRUE)
base$Data <- a[,3] 

##Limpar o nome das Comarcas

base <- separate(base, Comarca, c(NA, "Comarca"), sep="Comarca: ")

base <- base %>% drop_na(Comarca)

base$Comarca <- str_to_lower(base$Comarca)

##Limpar o nome dos Magistrados

base <- separate(base, Magistrado, c(NA, "Magistrado"), sep="Magistrado: ") 

base <- base %>% drop_na(Magistrado)

#Codificar as entrancias das comarcas

entrancia$comarca <- str_to_lower(entrancia$comarca)

entrancia <- entrancia %>% separate(comarca, c(NA, "comarca"), sep="- ")

entrancia <- entrancia %>% separate(comarca, c("comarca", NA), sep="\\(")

entrancia$comarca <-  str_remove(entrancia$comarca, pattern = ";")

entrancia$comarca <- trim(entrancia$comarca)

base$entrancia <- entrancia$entrancia[match(base$Comarca, entrancia$comarca)]

#Retirar os processos com mais de dois reus

regex_acusados <- or("foram" %R%
                       one_or_more(SPC) %R% 
                       "denunciad" %R% WRD %R% "s",
                     "qualificad" %R% WRD %R% "s",
                     "e outroju", "e outrosju")

acusados <- str_which(base$Decis�o, regex_acusados)

base <- base[-acusados,]

##############################
#  Codificacao das decisoes  #
##############################

#Criar as express�es regulares

procedente <-  or("julg" %R% or("o", "a-se") %R% one_or_more(SPC) %R%
                    optional(or("a den�ncia", "a presente a��o") %R% one_or_more(SPC))%R%
                    "procedente", "julg" %R% or("o", "a-se") %R% one_or_more(SPC) %R%
                    or("parcialmente", "em parte") %R% one_or_more(SPC) %R%
                    "procedente", "fix" %R% one_or_more(WRD) %R%
                    one_or_more(SPC) %R% "a" %R% "condena" %R% or("��o", "�ao", "c�o", "cao"),
                  "crime" %R% optional("s") %R% one_or_more(SPC) %R%
                    "rest" %R% or("ou", "aram") %R% one_or_more(SPC) %R% "configurado",
                  "fix" %R% or("a-se","am-se", "o", "ando", "o-lhe", "ar") %R% one_or_more(SPC) 
                  %R% optional(or("as", "a")) %R%
                    one_or_more(SPC) %R% "pena",
                  "condeno" %R% one_or_more(SPC),
                  "arbitro" %R% one_or_more(SPC) %R% or("a", "as") %R%
                    one_or_more(SPC) %R% "pena", or("passo", "passa-se") %R% 
                    or(", pois, ", one_or_more(SPC))  %R%
                    or("�", "a") %R% one_or_more(SPC) %R% or("dosimetria", "dosa"))


improcedente <-  or("julg" %R% or("o", "a-se") %R% one_or_more(SPC) %R%
                      "improcedente",
                    "julg" %R% or("o", "a-se") %R% one_or_more(SPC) %R%
                      or("a den�ncia", "a presente a��o", "a presente a��o penal",
                         "a a��o penal", "o pedido desta a��o penal") %R%
                      one_or_more(SPC) %R% "improcedente",
                    "absolv" %R% or("o", "erei"),
                    "necess�ria" %R% one_or_more(SPC) %R% "a" %R% "absolvi" %R%
                      or("��o", "�ao", "c�o", "cao"),
                    "rejeito" %R% one_or_more(SPC) %R% "a" %R% one_or_more(SPC) %R%
                      "den" %R% or("u", "�") %R% "ncia",
                    "exting" %R% or("o", "uir") %R% one_or_more(SPC) %R%
                      "o feito",
                    or("ficando absolvida", "ficando absolvido"))

extinta_punibilidade <- or("extin" %R% or("��o", "c�o", "�ao", "cao") %R% one_or_more(SPC) %R%
                             "da" %R% optional("s") %R% one_or_more(SPC) %R% "punibilidade",
                           "extin" %R% or("guo", "ta") %R% one_or_more(SPC) %R% or("sua" %R%
                                                                                     optional("s"), "a" %R% optional("s")) %R% one_or_more(SPC) %R%
                             or("punibilidade", "pena de multa"),
                           or("julg", "declar") %R% one_or_more(WRD) %R% one_or_more(SPC) %R%
                             "extint")

#Codificar

base$condena <- NA
base$condena <- as.numeric(str_detect(base$Decis�o, procedente)) #1 - procedente, 0 improcedente

base$absolve <- NA
base$absolve <- as.numeric(str_detect(base$Decis�o, improcedente))# 1 - improcedente, 0 procedente

base$extinta_pun <- NA
base$extinta_pun <- as.numeric(str_detect(base$Decis�o, extinta_punibilidade))# 1 - extinta, 0 - nao extinta

#Excluir decisoes
base1 <- base %>% filter(condena==0 & absolve==0 & extinta_pun==0) #Decisoes sem cod

base2 <- base %>% filter(extinta_pun==1) #Decisoes de extincao de punibilidade

base3 <- base %>% filter(condena==1 & absolve==1) #Decisoes com condenacao e absolvicao

base4 <- base %>% filter(condena==0 & absolve==0)

base5 <- rbind(base1, base2, base3, base4)

base5 <- unique(base5)

base <- setdiff(base, base5) #Excluir as decis�es

#Exclui a coluna de decisao
base$Decis�o <- NULL
base$extinta_pun <- NULL

###################
#  Salvar a base  #
###################

export(base, "base_codificada.rda")
